package com.itheima.interceptor;

import com.alibaba.fastjson.JSONObject;
import com.itheima.pojo.MyResponseResult;
import com.itheima.utils.MyJwtUtil;
import com.itheima.utils.MyThreadLocalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;

@Component
public class MyLoginInterceptor implements HandlerInterceptor {
    @Autowired
    private MyJwtUtil myJwtUtil;
    //该方法每次浏览器请求的时候，只要路径对上号就会执行1次，返回true代表放行，返回false代表不放行
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {
        System.out.println("我们自定义的Spring的拦截器执行了======================");
        //Token检验的
        String token = request.getHeader("Token");
        Map<String, Object> map = myJwtUtil.parseJwt(token);

        //不合法情况
        if (map==null){
            MyResponseResult<Object> error = MyResponseResult.error("NOT_LOGIN");
            //error响应给前端（需要把对象转json由于目前代码没有执行controller，因此需要我们自己手动转成json并手动响应数据）
            String jsonString = JSONObject.toJSONString((error));
            response.getWriter().println(jsonString);
            return false;
        }
        //合法的情况，用threadlocal  本地线程保存一个变量以便于后续的使用
        MyThreadLocalUtil.setValue(map);
        return true;
    }
}
